package com.cnap.service;

import com.cnap.model.common.PageResult;
import com.cnap.model.intelligent.IntelligentClusterInfo;
import com.cnap.model.intelligent.NotifyClusterInfoDTO;
import com.cnap.model.intelligent.UpdateIntelligentDTO;
import com.cnap.model.schedule.QueryMicroServiceParam;
import com.cnap.model.schedule.UpdateUserChooseParam;
import com.cnap.model.schedule.engine.DeployPolicyCalcResV2;
import com.cnap.model.strategy.MicroServiceVOV2;
import com.cnap.model.strategy.StrategyVO;
import com.cnap.model.strategy.scale.ScaleStrategyDTO;
import com.cnap.model.strategy.schedule.ScheduleStrategyDTO;

import java.util.List;

/**
 * 策略服务类
 *
 * @author xc
 **/
public interface StrategyService {

    /**
     * 由于迁移而创建虚机的回调接口，用于更新集群信息等
     *
     * @param notifyClusterInfoDTO 参数
     */
    void notifyClusterInfoByMigrateCreateResource(NotifyClusterInfoDTO notifyClusterInfoDTO);

    /**
     * 智能调度决策比较
     *
     * @param svcId 微服务id
     */
    void intelligentScheduleCompare(String svcId);

    /**
     * 迁移微服务
     *
     * @param svcId        微服务id
     * @param suggestInfos 优化建议集群
     * @param deployRes    算法响应
     */
    void migrateService(String svcId, List<IntelligentClusterInfo> suggestInfos, DeployPolicyCalcResV2 deployRes);

    /**
     * 添加调度策略
     *
     * @param scheduleStrategyDTOs 参数
     */
    void addScheduleStrategy(List<ScheduleStrategyDTO> scheduleStrategyDTOs);

    /**
     * 添加扩缩容策略
     *
     * @param scaleStrategyDTOS 参数
     */
    void addScaleStrategy(List<ScaleStrategyDTO> scaleStrategyDTOS);

    /**
     * 根据应用id查询策略
     *
     * @param appId appId
     * @return 结果
     */
    List<StrategyVO> getStrategyByAppId(String appId);

    /**
     * 删除调度策略
     *
     * @param ids id列表
     * @return 结果
     */
    boolean deleteScheduleStrategy(List<String> ids);

    /**
     * 删除扩缩容策略
     *
     * @param ids id列表
     * @return 结果
     */
    boolean deleteScaleStrategy(List<String> ids);

    /**
     * 更新用户选择
     *
     * @param updateUserChooseParam 参数
     */
    void updateUserChoose(UpdateUserChooseParam updateUserChooseParam);

    /**
     * 策略部署管理页面-分页查询
     *
     * @param queryMicroServiceParam 参数
     * @return 结果
     */
    PageResult<MicroServiceVOV2> findByPage(QueryMicroServiceParam queryMicroServiceParam);

    /**
     * 更新智能调度决策
     *
     * @param updateIntelligentDTO 参数
     */
    void updateIntelligentParam(UpdateIntelligentDTO updateIntelligentDTO);

    /**
     * 根据id删除决策记录
     *
     * @param id id
     */
    void deleteIntelligentHistoryById(String id);

    /**
     * 根据微服务id删除策略（调度、扩缩容）
     *
     * @param svcId 微服务id
     */
    void deleteStrategyBySvcId(String svcId);

    /**
     * 根据微服务id删除智能调度信息
     *
     * @param svcId svcId
     */
    void deleteIntelligentInfoBySvcId(String svcId);
}
